/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * DeleteVolumeData request structure.
 * @class
 */
class DeleteVolumeDataRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Volume ID
         * @type {string || null}
         */
        this.VolumeId = null;

        /**
         * Path to be deleted
         * @type {string || null}
         */
        this.Path = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VolumeId = 'VolumeId' in params ? params.VolumeId : null;
        this.Path = 'Path' in params ? params.Path : null;

    }
}

/**
 * RetryRuns response structure.
 * @class
 */
class RetryRunsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * New run group ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RunGroupId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RunGroupId = 'RunGroupId' in params ? params.RunGroupId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RunApplication response structure.
 * @class
 */
class RunApplicationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Run group ID
         * @type {string || null}
         */
        this.RunGroupId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RunGroupId = 'RunGroupId' in params ? params.RunGroupId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Execution time
 * @class
 */
class ExecutionTime extends  AbstractModel {
    constructor(){
        super();

        /**
         * Submission time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubmitTime = null;

        /**
         * Start time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubmitTime = 'SubmitTime' in params ? params.SubmitTime : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

    }
}

/**
 * Run running status
 * @class
 */
class RunStatusCount extends  AbstractModel {
    constructor(){
        super();

        /**
         * Status
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Quantity
         * @type {number || null}
         */
        this.Count = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.Count = 'Count' in params ? params.Count : null;

    }
}

/**
 * GetRunStatus request structure.
 * @class
 */
class GetRunStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Run UUID
         * @type {string || null}
         */
        this.RunUuid = null;

        /**
         * Project ID
(If you leave it blank, the default item in the specified region will be used.)
         * @type {string || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RunUuid = 'RunUuid' in params ? params.RunUuid : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * DescribeRuns response structure.
 * @class
 */
class DescribeRunsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of qualified items
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Run list
         * @type {Array.<Run> || null}
         */
        this.Runs = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Runs) {
            this.Runs = new Array();
            for (let z in params.Runs) {
                let obj = new Run();
                obj.deserialize(params.Runs[z]);
                this.Runs.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ImportTableFile response structure.
 * @class
 */
class ImportTableFileResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Table ID
         * @type {string || null}
         */
        this.TableId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TableId = 'TableId' in params ? params.TableId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RunApplication request structure.
 * @class
 */
class RunApplicationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Run group name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Delivery environment ID
         * @type {string || null}
         */
        this.EnvironmentId = null;

        /**
         * Project ID. (If you leave it blank, the default item in the specified region will be used.)
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Run group description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Run input COS path. (Either InputBase64 or InputCosUri must be selected.)
         * @type {string || null}
         */
        this.InputCosUri = null;

        /**
         * Run input JSON. Base64 encoding is required. (Either InputBase64 or InputCosUri must be selected.)
         * @type {string || null}
         */
        this.InputBase64 = null;

        /**
         * Batch deliver table ID. Leaving it blank indicates delivery in singleton mode.
         * @type {string || null}
         */
        this.TableId = null;

        /**
         * Batch deliver table row UUID. Leaving it blank indicates all rows of the table.
         * @type {Array.<string> || null}
         */
        this.TableRowUuids = null;

        /**
         * Run cache cleanup time (hours). Leaving it blank or entering 0 indicates no cleanup.
         * @type {number || null}
         */
        this.CacheClearDelay = null;

        /**
         * Application version ID. Leaving it blank indicates that the latest version is used.
         * @type {string || null}
         */
        this.ApplicationVersionId = null;

        /**
         * WDL running option
         * @type {RunOption || null}
         */
        this.Option = null;

        /**
         * Nextflow running option
         * @type {NFOption || null}
         */
        this.NFOption = null;

        /**
         * Working directory. You can fill in the absolute path in the specified volume. If you leave it blank, the default path in the default volume will be used. Currently, only Nextflow is supported.
         * @type {string || null}
         */
        this.WorkDir = null;

        /**
         * Access mode. Leaving it blank indicates it is private by default. Valid values:
- PRIVATE: Private application
- PUBLIC: Public application
         * @type {string || null}
         */
        this.AccessMode = null;

        /**
         * Volume ID. If you leave it blank, the default volume will be used. Currently, only Nextflow is supported.
         * @type {Array.<string> || null}
         */
        this.VolumeIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.EnvironmentId = 'EnvironmentId' in params ? params.EnvironmentId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.InputCosUri = 'InputCosUri' in params ? params.InputCosUri : null;
        this.InputBase64 = 'InputBase64' in params ? params.InputBase64 : null;
        this.TableId = 'TableId' in params ? params.TableId : null;
        this.TableRowUuids = 'TableRowUuids' in params ? params.TableRowUuids : null;
        this.CacheClearDelay = 'CacheClearDelay' in params ? params.CacheClearDelay : null;
        this.ApplicationVersionId = 'ApplicationVersionId' in params ? params.ApplicationVersionId : null;

        if (params.Option) {
            let obj = new RunOption();
            obj.deserialize(params.Option)
            this.Option = obj;
        }

        if (params.NFOption) {
            let obj = new NFOption();
            obj.deserialize(params.NFOption)
            this.NFOption = obj;
        }
        this.WorkDir = 'WorkDir' in params ? params.WorkDir : null;
        this.AccessMode = 'AccessMode' in params ? params.AccessMode : null;
        this.VolumeIds = 'VolumeIds' in params ? params.VolumeIds : null;

    }
}

/**
 * GetRunMetadataFile response structure.
 * @class
 */
class GetRunMetadataFileResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Document pre-signed link that works in a minute
         * @type {string || null}
         */
        this.CosSignedUrl = null;

        /**
         * Batch document pre-signed link that works in a minute
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.CosSignedUrls = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CosSignedUrl = 'CosSignedUrl' in params ? params.CosSignedUrl : null;
        this.CosSignedUrls = 'CosSignedUrls' in params ? params.CosSignedUrls : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateVolume response structure.
 * @class
 */
class CreateVolumeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Volume ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VolumeId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VolumeId = 'VolumeId' in params ? params.VolumeId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteEnvironment response structure.
 * @class
 */
class DeleteEnvironmentResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Workflow UUID
         * @type {string || null}
         */
        this.WorkflowUuid = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkflowUuid = 'WorkflowUuid' in params ? params.WorkflowUuid : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Tencent Healthcare Omics Platform environment details
 * @class
 */
class Environment extends  AbstractModel {
    constructor(){
        super();

        /**
         * Environment ID
         * @type {string || null}
         */
        this.EnvironmentId = null;

        /**
         * Environment name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Environment description information
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Environment region
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Environment type. Valid values:
- KUBERNETES: Kubernetes container cluster
- HPC:HPC HCC 
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Environment status. Valid values:
- INITIALIZING: Creating
- INITIALIZATION_ERROR: Creation failed
- RUNNING: Running
- ERROR: Exceptional
- DELETING: Deleting
- DELETE_ERROR: Deletion failed.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Whether the environment is available. The environment needs to be available before computing runs can be delivered.
         * @type {boolean || null}
         */
        this.Available = null;

        /**
         * Whether the environment is the default environment.
         * @type {boolean || null}
         */
        this.IsDefault = null;

        /**
         * Whether the environment is a managed environment.
         * @type {boolean || null}
         */
        this.IsManaged = null;

        /**
         * Environment information
         * @type {string || null}
         */
        this.Message = null;

        /**
         * Cloud resource ID
         * @type {ResourceIds || null}
         */
        this.ResourceIds = null;

        /**
         * The UUID of the previous workflow
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastWorkflowUuid = null;

        /**
         * Creation time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreationTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EnvironmentId = 'EnvironmentId' in params ? params.EnvironmentId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Available = 'Available' in params ? params.Available : null;
        this.IsDefault = 'IsDefault' in params ? params.IsDefault : null;
        this.IsManaged = 'IsManaged' in params ? params.IsManaged : null;
        this.Message = 'Message' in params ? params.Message : null;

        if (params.ResourceIds) {
            let obj = new ResourceIds();
            obj.deserialize(params.ResourceIds)
            this.ResourceIds = obj;
        }
        this.LastWorkflowUuid = 'LastWorkflowUuid' in params ? params.LastWorkflowUuid : null;
        this.CreationTime = 'CreationTime' in params ? params.CreationTime : null;

    }
}

/**
 * GetRunCalls request structure.
 * @class
 */
class GetRunCallsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Run UUID
         * @type {string || null}
         */
        this.RunUuid = null;

        /**
         * Job path
         * @type {string || null}
         */
        this.Path = null;

        /**
         * Project ID
(If you leave it blank, the default item in the specified region will be used.)
         * @type {string || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RunUuid = 'RunUuid' in params ? params.RunUuid : null;
        this.Path = 'Path' in params ? params.Path : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * RunWorkflow request structure.
 * @class
 */
class RunWorkflowRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Run group name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Delivery environment ID
         * @type {string || null}
         */
        this.EnvironmentId = null;

        /**
         * Workflow Git repository information
         * @type {GitInfo || null}
         */
        this.GitSource = null;

        /**
         * Workflow type

Supported type:
- NEXTFLOW
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Nextflow option
         * @type {NFOption || null}
         */
        this.NFOption = null;

        /**
         * Project ID
(If you leave it blank, the default item in the specified region will be used.)
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Run group description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Run input JSON. Base64 encoding is required.
(Either InputBase64 or InputCosUri must be selected.)
         * @type {string || null}
         */
        this.InputBase64 = null;

        /**
         * Run input COS path
(Either InputBase64 or InputCosUri must be selected.)
         * @type {string || null}
         */
        this.InputCosUri = null;

        /**
         * Run cache cleanup time (hours). Leaving it blank or entering 0 indicates no cleanup.
         * @type {number || null}
         */
        this.CacheClearDelay = null;

        /**
         * Working directory. You can fill in the absolute path in the specified volume. If you leave it blank, the default path in the default volume will be used. Currently, only Nextflow is supported.
         * @type {string || null}
         */
        this.WorkDir = null;

        /**
         * Volume ID. If you leave it blank, the default volume will be used. Currently, only Nextflow is supported.
         * @type {Array.<string> || null}
         */
        this.VolumeIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.EnvironmentId = 'EnvironmentId' in params ? params.EnvironmentId : null;

        if (params.GitSource) {
            let obj = new GitInfo();
            obj.deserialize(params.GitSource)
            this.GitSource = obj;
        }
        this.Type = 'Type' in params ? params.Type : null;

        if (params.NFOption) {
            let obj = new NFOption();
            obj.deserialize(params.NFOption)
            this.NFOption = obj;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.InputBase64 = 'InputBase64' in params ? params.InputBase64 : null;
        this.InputCosUri = 'InputCosUri' in params ? params.InputCosUri : null;
        this.CacheClearDelay = 'CacheClearDelay' in params ? params.CacheClearDelay : null;
        this.WorkDir = 'WorkDir' in params ? params.WorkDir : null;
        this.VolumeIds = 'VolumeIds' in params ? params.VolumeIds : null;

    }
}

/**
 * DescribeRuns request structure.
 * @class
 */
class DescribeRunsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID
(If you leave it blank, the default item in the specified region will be used.)
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Quantity of returns. It is 10 by default, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset, which defaults to 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Filter, which supports filtering fields:
- RunGroupId: run group ID
- Status: run status
- RunUuid: run UUID
- UserDefinedId: user-defined ID
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * Run
 * @class
 */
class Run extends  AbstractModel {
    constructor(){
        super();

        /**
         * Run UUID
         * @type {string || null}
         */
        this.RunUuid = null;

        /**
         * Project ID
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Application ID
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Run group ID
         * @type {string || null}
         */
        this.RunGroupId = null;

        /**
         * Environment ID
         * @type {string || null}
         */
        this.EnvironmentId = null;

        /**
         * User-defined ID. Null for running in singleton mode.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserDefinedId = null;

        /**
         * Table ID. Null for running in singleton mode.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TableId = null;

        /**
         * Table row UUID. Null for running in singleton mode.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TableRowUuid = null;

        /**
         * Run status
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Run input
         * @type {string || null}
         */
        this.Input = null;

        /**
         * Running option
         * @type {RunOption || null}
         */
        this.Option = null;

        /**
         * Execution time
         * @type {ExecutionTime || null}
         */
        this.ExecutionTime = null;

        /**
         * Cache information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {CacheInfo || null}
         */
        this.Cache = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMessage = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Update time
         * @type {string || null}
         */
        this.UpdateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RunUuid = 'RunUuid' in params ? params.RunUuid : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.RunGroupId = 'RunGroupId' in params ? params.RunGroupId : null;
        this.EnvironmentId = 'EnvironmentId' in params ? params.EnvironmentId : null;
        this.UserDefinedId = 'UserDefinedId' in params ? params.UserDefinedId : null;
        this.TableId = 'TableId' in params ? params.TableId : null;
        this.TableRowUuid = 'TableRowUuid' in params ? params.TableRowUuid : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Input = 'Input' in params ? params.Input : null;

        if (params.Option) {
            let obj = new RunOption();
            obj.deserialize(params.Option)
            this.Option = obj;
        }

        if (params.ExecutionTime) {
            let obj = new ExecutionTime();
            obj.deserialize(params.ExecutionTime)
            this.ExecutionTime = obj;
        }

        if (params.Cache) {
            let obj = new CacheInfo();
            obj.deserialize(params.Cache)
            this.Cache = obj;
        }
        this.ErrorMessage = 'ErrorMessage' in params ? params.ErrorMessage : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;

    }
}

/**
 * Table column
 * @class
 */
class TableColumn extends  AbstractModel {
    constructor(){
        super();

        /**
         * Column name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Header = null;

        /**
         * Column data type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Header = 'Header' in params ? params.Header : null;
        this.DataType = 'DataType' in params ? params.DataType : null;

    }
}

/**
 * CreateVolume request structure.
 * @class
 */
class CreateVolumeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Environment ID
         * @type {string || null}
         */
        this.EnvironmentId = null;

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Volume type. Valid values:
* SHARED: Multi-point mount shared storage
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Volume specifications. Valid values:

- SD: standard
- HP: high-performance
- TB: standard Turbo
- TP: high-performance Turbo
         * @type {string || null}
         */
        this.Spec = null;

        /**
         * Description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Volume size (GB), which is required to be specified for the Turbo series.
         * @type {number || null}
         */
        this.Capacity = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EnvironmentId = 'EnvironmentId' in params ? params.EnvironmentId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Spec = 'Spec' in params ? params.Spec : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Capacity = 'Capacity' in params ? params.Capacity : null;

    }
}

/**
 * Security group configuration
 * @class
 */
class SecurityGroupOption extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group ID
         * @type {string || null}
         */
        this.SecurityGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;

    }
}

/**
 * DescribeTablesRows request structure.
 * @class
 */
class DescribeTablesRowsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Table ID
         * @type {string || null}
         */
        this.TableId = null;

        /**
         * Quantity of returns. It is 10 by default, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset, which defaults to 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Filter, which supports filtering fields:
- Tr: Table data, which supports fuzzy query.
- TableRowUuid: table row UUID
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.TableId = 'TableId' in params ? params.TableId : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * DescribeEnvironments response structure.
 * @class
 */
class DescribeEnvironmentsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of qualified items
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * List of Environment details
         * @type {Array.<Environment> || null}
         */
        this.Environments = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Environments) {
            this.Environments = new Array();
            for (let z in params.Environments) {
                let obj = new Environment();
                obj.deserialize(params.Environments[z]);
                this.Environments.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyVolume response structure.
 * @class
 */
class ModifyVolumeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Resource limit scope
 * @class
 */
class LimitRange extends  AbstractModel {
    constructor(){
        super();

        /**
         * Maximum CPU setting
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MaxCPU = null;

        /**
         * Maximum memory setting (unit: Mi, Gi, Ti, M, G, and T)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MaxMemory = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MaxCPU = 'MaxCPU' in params ? params.MaxCPU : null;
        this.MaxMemory = 'MaxMemory' in params ? params.MaxMemory : null;

    }
}

/**
 * DescribeTables response structure.
 * @class
 */
class DescribeTablesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of results
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Table list
         * @type {Array.<Table> || null}
         */
        this.Tables = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Tables) {
            this.Tables = new Array();
            for (let z in params.Tables) {
                let obj = new Table();
                obj.deserialize(params.Tables[z]);
                this.Tables.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * VPC configuration
 * @class
 */
class VPCOption extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC ID (Either VPCId or VPCCIDRBlock must be selected. If VPCId is selected, the existing VPCs will be used; if VPCCIDRBlock is selected, a new VPC will be created.)
         * @type {string || null}
         */
        this.VPCId = null;

        /**
         * Subnet ID (Either SubnetId or SubnetZone&SubnetCIDRBlock must be selected. If SubnetId is selected, the existing subnet will be used; if SubnetZone&SubnetCIDRBlock is selected, a new subnet will be created.)
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Subnet availability zone
         * @type {string || null}
         */
        this.SubnetZone = null;

        /**
         *  VPC CIDR.
         * @type {string || null}
         */
        this.VPCCIDRBlock = null;

        /**
         * Subnet CIDR
         * @type {string || null}
         */
        this.SubnetCIDRBlock = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VPCId = 'VPCId' in params ? params.VPCId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.SubnetZone = 'SubnetZone' in params ? params.SubnetZone : null;
        this.VPCCIDRBlock = 'VPCCIDRBlock' in params ? params.VPCCIDRBlock : null;
        this.SubnetCIDRBlock = 'SubnetCIDRBlock' in params ? params.SubnetCIDRBlock : null;

    }
}

/**
 * Resource quota
 * @class
 */
class ResourceQuota extends  AbstractModel {
    constructor(){
        super();

        /**
         * CPU limit setting
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CPULimit = null;

        /**
         * Memory limit setting (Unit: Mi, Gi, Ti, M, G, and T)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MemoryLimit = null;

        /**
         * Pod quantity setting
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Pods = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CPULimit = 'CPULimit' in params ? params.CPULimit : null;
        this.MemoryLimit = 'MemoryLimit' in params ? params.MemoryLimit : null;
        this.Pods = 'Pods' in params ? params.Pods : null;

    }
}

/**
 * RetryRuns request structure.
 * @class
 */
class RetryRunsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID. (If you leave it blank, the default item in the specified region will be used.)
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * The run group ID that needs to be retried
         * @type {string || null}
         */
        this.RunGroupId = null;

        /**
         * The run UUID that needs to be retried
         * @type {Array.<string> || null}
         */
        this.RunUuids = null;

        /**
         * WDL running option. If you leave it blank, the retried run group running option will be used.
         * @type {RunOption || null}
         */
        this.WDLOption = null;

        /**
         * Nextflow running option. If you leave it blank, the retried run group running option will be used.
         * @type {NFOption || null}
         */
        this.NFOption = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.RunGroupId = 'RunGroupId' in params ? params.RunGroupId : null;
        this.RunUuids = 'RunUuids' in params ? params.RunUuids : null;

        if (params.WDLOption) {
            let obj = new RunOption();
            obj.deserialize(params.WDLOption)
            this.WDLOption = obj;
        }

        if (params.NFOption) {
            let obj = new NFOption();
            obj.deserialize(params.NFOption)
            this.NFOption = obj;
        }

    }
}

/**
 * ImportTableFile request structure.
 * @class
 */
class ImportTableFileRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID associated with the table
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Table name: Up to 200 characters in length is supported.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Table file COS object path
         * @type {string || null}
         */
        this.CosUri = null;

        /**
         * Data type of each column in the table file. Supported types include Int, Float, String, File, Boolean, Array[Int], Array[Float], Array[String], Array[File], and Array[Boolean].
         * @type {Array.<string> || null}
         */
        this.DataType = null;

        /**
         * Table description: Up to 500 characters in length is supported.
         * @type {string || null}
         */
        this.Description = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.CosUri = 'CosUri' in params ? params.CosUri : null;
        this.DataType = 'DataType' in params ? params.DataType : null;
        this.Description = 'Description' in params ? params.Description : null;

    }
}

/**
 * DeleteVolume response structure.
 * @class
 */
class DeleteVolumeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Cache information
 * @class
 */
class CacheInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cache cleanup time (hours)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CacheClearDelay = null;

        /**
         * Cache cleanup schedule time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CacheClearTime = null;

        /**
         * Whether the cache has been cleaned up
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.CacheCleared = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CacheClearDelay = 'CacheClearDelay' in params ? params.CacheClearDelay : null;
        this.CacheClearTime = 'CacheClearTime' in params ? params.CacheClearTime : null;
        this.CacheCleared = 'CacheCleared' in params ? params.CacheCleared : null;

    }
}

/**
 * Computing cluster configuration
 * @class
 */
class ClusterOption extends  AbstractModel {
    constructor(){
        super();

        /**
         * Computing cluster availability zone
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Computing cluster type. Valid values:
- KUBERNETES
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Computing cluster Service CIDR. It must not overlap with the VPC IP range.
         * @type {string || null}
         */
        this.ServiceCidr = null;

        /**
         * Resource quota
         * @type {ResourceQuota || null}
         */
        this.ResourceQuota = null;

        /**
         * Limit scope
         * @type {LimitRange || null}
         */
        this.LimitRange = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.ServiceCidr = 'ServiceCidr' in params ? params.ServiceCidr : null;

        if (params.ResourceQuota) {
            let obj = new ResourceQuota();
            obj.deserialize(params.ResourceQuota)
            this.ResourceQuota = obj;
        }

        if (params.LimitRange) {
            let obj = new LimitRange();
            obj.deserialize(params.LimitRange)
            this.LimitRange = obj;
        }

    }
}

/**
 * TerminateRunGroup response structure.
 * @class
 */
class TerminateRunGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVolumes response structure.
 * @class
 */
class DescribeVolumesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Volume
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Volume> || null}
         */
        this.Volumes = null;

        /**
         * Number of qualified items
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Volumes) {
            this.Volumes = new Array();
            for (let z in params.Volumes) {
                let obj = new Volume();
                obj.deserialize(params.Volumes[z]);
                this.Volumes.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Git information
 * @class
 */
class GitInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Git URL
         * @type {string || null}
         */
        this.GitHttpPath = null;

        /**
         * Git username .
         * @type {string || null}
         */
        this.GitUserName = null;

        /**
         * Git password or Token
         * @type {string || null}
         */
        this.GitTokenOrPassword = null;

        /**
         * Branch
         * @type {string || null}
         */
        this.Branch = null;

        /**
         * Tag
         * @type {string || null}
         */
        this.Tag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GitHttpPath = 'GitHttpPath' in params ? params.GitHttpPath : null;
        this.GitUserName = 'GitUserName' in params ? params.GitUserName : null;
        this.GitTokenOrPassword = 'GitTokenOrPassword' in params ? params.GitTokenOrPassword : null;
        this.Branch = 'Branch' in params ? params.Branch : null;
        this.Tag = 'Tag' in params ? params.Tag : null;

    }
}

/**
 * Application version
 * @class
 */
class ApplicationVersion extends  AbstractModel {
    constructor(){
        super();

        /**
         * Version type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Version ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ApplicationVersionId = null;

        /**
         * Release name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Release description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Entry file
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Entrypoint = null;

        /**
         * Creation time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Creator name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatorName = null;

        /**
         * Creator ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatorId = null;

        /**
         * Git information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GitInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;
        this.ApplicationVersionId = 'ApplicationVersionId' in params ? params.ApplicationVersionId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Entrypoint = 'Entrypoint' in params ? params.Entrypoint : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.CreatorName = 'CreatorName' in params ? params.CreatorName : null;
        this.CreatorId = 'CreatorId' in params ? params.CreatorId : null;
        this.GitInfo = 'GitInfo' in params ? params.GitInfo : null;

    }
}

/**
 * DeleteVolume request structure.
 * @class
 */
class DeleteVolumeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Volume ID
         * @type {string || null}
         */
        this.VolumeId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VolumeId = 'VolumeId' in params ? params.VolumeId : null;

    }
}

/**
 * DeleteEnvironment request structure.
 * @class
 */
class DeleteEnvironmentRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Environment ID
         * @type {string || null}
         */
        this.EnvironmentId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EnvironmentId = 'EnvironmentId' in params ? params.EnvironmentId : null;

    }
}

/**
 * Run
 * @class
 */
class RunGroup extends  AbstractModel {
    constructor(){
        super();

        /**
         * Run group ID
         * @type {string || null}
         */
        this.RunGroupId = null;

        /**
         * Project ID
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Project name
         * @type {string || null}
         */
        this.ProjectName = null;

        /**
         * Application ID
         * @type {string || null}
         */
        this.ApplicationId = null;

        /**
         * Application name
         * @type {string || null}
         */
        this.ApplicationName = null;

        /**
         * Application type
         * @type {string || null}
         */
        this.ApplicationType = null;

        /**
         * Environment ID
         * @type {string || null}
         */
        this.EnvironmentId = null;

        /**
         * Environment name
         * @type {string || null}
         */
        this.EnvironmentName = null;

        /**
         * Table ID. Null for running in singleton mode.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TableId = null;

        /**
         * Run name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Run description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Run status
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Run input
         * @type {string || null}
         */
        this.Input = null;

        /**
         * WDL running option
         * @type {RunOption || null}
         */
        this.Option = null;

        /**
         * Nextflow running option
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NFOption || null}
         */
        this.NFOption = null;

        /**
         * Total number of runs
         * @type {number || null}
         */
        this.TotalRun = null;

        /**
         * Number of runs in various status
         * @type {Array.<RunStatusCount> || null}
         */
        this.RunStatusCounts = null;

        /**
         * Execution time
         * @type {ExecutionTime || null}
         */
        this.ExecutionTime = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.ErrorMessage = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Update time
         * @type {string || null}
         */
        this.UpdateTime = null;

        /**
         * Creator
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Creator = null;

        /**
         * Creator ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatorId = null;

        /**
         * Running result notification method
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResultNotify = null;

        /**
         * Application version
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ApplicationVersion || null}
         */
        this.ApplicationVersion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RunGroupId = 'RunGroupId' in params ? params.RunGroupId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ProjectName = 'ProjectName' in params ? params.ProjectName : null;
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.ApplicationName = 'ApplicationName' in params ? params.ApplicationName : null;
        this.ApplicationType = 'ApplicationType' in params ? params.ApplicationType : null;
        this.EnvironmentId = 'EnvironmentId' in params ? params.EnvironmentId : null;
        this.EnvironmentName = 'EnvironmentName' in params ? params.EnvironmentName : null;
        this.TableId = 'TableId' in params ? params.TableId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Input = 'Input' in params ? params.Input : null;

        if (params.Option) {
            let obj = new RunOption();
            obj.deserialize(params.Option)
            this.Option = obj;
        }

        if (params.NFOption) {
            let obj = new NFOption();
            obj.deserialize(params.NFOption)
            this.NFOption = obj;
        }
        this.TotalRun = 'TotalRun' in params ? params.TotalRun : null;

        if (params.RunStatusCounts) {
            this.RunStatusCounts = new Array();
            for (let z in params.RunStatusCounts) {
                let obj = new RunStatusCount();
                obj.deserialize(params.RunStatusCounts[z]);
                this.RunStatusCounts.push(obj);
            }
        }

        if (params.ExecutionTime) {
            let obj = new ExecutionTime();
            obj.deserialize(params.ExecutionTime)
            this.ExecutionTime = obj;
        }
        this.ErrorMessage = 'ErrorMessage' in params ? params.ErrorMessage : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;
        this.Creator = 'Creator' in params ? params.Creator : null;
        this.CreatorId = 'CreatorId' in params ? params.CreatorId : null;
        this.ResultNotify = 'ResultNotify' in params ? params.ResultNotify : null;

        if (params.ApplicationVersion) {
            let obj = new ApplicationVersion();
            obj.deserialize(params.ApplicationVersion)
            this.ApplicationVersion = obj;
        }

    }
}

/**
 * Database configuration
 * @class
 */
class DatabaseOption extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database availability zone
         * @type {string || null}
         */
        this.Zone = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;

    }
}

/**
 * GetRunCalls response structure.
 * @class
 */
class GetRunCallsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job details
         * @type {Array.<RunMetadata> || null}
         */
        this.Calls = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Calls) {
            this.Calls = new Array();
            for (let z in params.Calls) {
                let obj = new RunMetadata();
                obj.deserialize(params.Calls[z]);
                this.Calls.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Description key-value pair filter, which is used for conditional filtering queries.

- If there are multiple Filters, the logical relationship between them is AND.

- If there are multiple Values in the same Filter, the logical relationship between the Values under the same Filter is OR.
 * @class
 */
class Filter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filtering fields
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Filtering field values
         * @type {Array.<string> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * Cloud resource ID
 * @class
 */
class ResourceIds extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VPCId = null;

        /**
         * Subnet ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Security group ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * TDSQL-C for MySQL database ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TDSQLCId = null;

        /**
         *  CFS ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CFSId = null;

        /**
         * CFS type. Valid values:
- SD: standard
- HP: high-performance
- TB: standard Turbo
- TP: high-performance Turbo
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CFSStorageType = null;

        /**
         *  Cloud Virtual Machine ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CVMId = null;

        /**
         * Elastic container cluster ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EKSId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VPCId = 'VPCId' in params ? params.VPCId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;
        this.TDSQLCId = 'TDSQLCId' in params ? params.TDSQLCId : null;
        this.CFSId = 'CFSId' in params ? params.CFSId : null;
        this.CFSStorageType = 'CFSStorageType' in params ? params.CFSStorageType : null;
        this.CVMId = 'CVMId' in params ? params.CVMId : null;
        this.EKSId = 'EKSId' in params ? params.EKSId : null;

    }
}

/**
 * DescribeRunGroups response structure.
 * @class
 */
class DescribeRunGroupsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of qualified items
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Run group list
         * @type {Array.<RunGroup> || null}
         */
        this.RunGroups = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.RunGroups) {
            this.RunGroups = new Array();
            for (let z in params.RunGroups) {
                let obj = new RunGroup();
                obj.deserialize(params.RunGroups[z]);
                this.RunGroups.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Volume
 * @class
 */
class Volume extends  AbstractModel {
    constructor(){
        super();

        /**
         * Volume ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VolumeId = null;

        /**
         * Name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Environment ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EnvironmentId = null;

        /**
         * Volume type. Valid values:
* SHARED: Multi-point mount shared storage
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Volume specifications. Valid values:

- SD: standard
- HP: high-performance
- TB: standard Turbo
- TP: high-performance Turbo
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Spec = null;

        /**
         * Volume size (GB)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Capacity = null;

        /**
         * Volume usage (Byte)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Usage = null;

        /**
         * Volume throughput upper limit (MiB/s)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BandwidthLimit = null;

        /**
         * Default mount path
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DefaultMountPath = null;

        /**
         * Whether it is the default volume.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsDefault = null;

        /**
         * Status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VolumeId = 'VolumeId' in params ? params.VolumeId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.EnvironmentId = 'EnvironmentId' in params ? params.EnvironmentId : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Spec = 'Spec' in params ? params.Spec : null;
        this.Capacity = 'Capacity' in params ? params.Capacity : null;
        this.Usage = 'Usage' in params ? params.Usage : null;
        this.BandwidthLimit = 'BandwidthLimit' in params ? params.BandwidthLimit : null;
        this.DefaultMountPath = 'DefaultMountPath' in params ? params.DefaultMountPath : null;
        this.IsDefault = 'IsDefault' in params ? params.IsDefault : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * TerminateRunGroup request structure.
 * @class
 */
class TerminateRunGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Run group ID
         * @type {string || null}
         */
        this.RunGroupId = null;

        /**
         * Project ID
(If you leave it blank, the default item in the specified region will be used.)
         * @type {string || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RunGroupId = 'RunGroupId' in params ? params.RunGroupId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * Environment configuration
 * @class
 */
class EnvironmentConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC configuration
         * @type {VPCOption || null}
         */
        this.VPCOption = null;

        /**
         * Computing cluster configuration
         * @type {ClusterOption || null}
         */
        this.ClusterOption = null;

        /**
         * Database configuration
         * @type {DatabaseOption || null}
         */
        this.DatabaseOption = null;

        /**
         * Storage configuration
         * @type {StorageOption || null}
         */
        this.StorageOption = null;

        /**
         * CVM configuration
         * @type {CVMOption || null}
         */
        this.CVMOption = null;

        /**
         * Security group configuration
         * @type {SecurityGroupOption || null}
         */
        this.SecurityGroupOption = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.VPCOption) {
            let obj = new VPCOption();
            obj.deserialize(params.VPCOption)
            this.VPCOption = obj;
        }

        if (params.ClusterOption) {
            let obj = new ClusterOption();
            obj.deserialize(params.ClusterOption)
            this.ClusterOption = obj;
        }

        if (params.DatabaseOption) {
            let obj = new DatabaseOption();
            obj.deserialize(params.DatabaseOption)
            this.DatabaseOption = obj;
        }

        if (params.StorageOption) {
            let obj = new StorageOption();
            obj.deserialize(params.StorageOption)
            this.StorageOption = obj;
        }

        if (params.CVMOption) {
            let obj = new CVMOption();
            obj.deserialize(params.CVMOption)
            this.CVMOption = obj;
        }

        if (params.SecurityGroupOption) {
            let obj = new SecurityGroupOption();
            obj.deserialize(params.SecurityGroupOption)
            this.SecurityGroupOption = obj;
        }

    }
}

/**
 * DescribeTablesRows response structure.
 * @class
 */
class DescribeTablesRowsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of results
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Table row list
         * @type {Array.<TableRow> || null}
         */
        this.Rows = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Rows) {
            this.Rows = new Array();
            for (let z in params.Rows) {
                let obj = new TableRow();
                obj.deserialize(params.Rows[z]);
                this.Rows.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateEnvironment response structure.
 * @class
 */
class CreateEnvironmentResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Environment ID
         * @type {string || null}
         */
        this.EnvironmentId = null;

        /**
         * Workflow UUID
         * @type {string || null}
         */
        this.WorkflowUuid = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EnvironmentId = 'EnvironmentId' in params ? params.EnvironmentId : null;
        this.WorkflowUuid = 'WorkflowUuid' in params ? params.WorkflowUuid : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GetRunMetadataFile request structure.
 * @class
 */
class GetRunMetadataFileRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Run UUID
         * @type {string || null}
         */
        this.RunUuid = null;

        /**
         * Project ID
(If you leave it blank, the default item in the specified region will be used.)
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * File names to be get

The following files are supported by default:
- nextflow.log

When report is specified as true in NFOption during submission, the following files are additionally supported:
- execution_report.html
- execution_timeline.html
- execution_trace.txt
- pipeline_dag.html
         * @type {string || null}
         */
        this.Key = null;

        /**
         * File names to be get in batch

The following files are supported by default:
- nextflow.log

When report is specified as true in NFOption during submission, the following files are additionally supported:
- execution_report.html
- execution_timeline.html
- execution_trace.txt
- pipeline_dag.html
         * @type {Array.<string> || null}
         */
        this.Keys = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RunUuid = 'RunUuid' in params ? params.RunUuid : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Key = 'Key' in params ? params.Key : null;
        this.Keys = 'Keys' in params ? params.Keys : null;

    }
}

/**
 * RunWorkflow response structure.
 * @class
 */
class RunWorkflowResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Run group ID
         * @type {string || null}
         */
        this.RunGroupId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RunGroupId = 'RunGroupId' in params ? params.RunGroupId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyVolume request structure.
 * @class
 */
class ModifyVolumeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Volume ID
         * @type {string || null}
         */
        this.VolumeId = null;

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Description
         * @type {string || null}
         */
        this.Description = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VolumeId = 'VolumeId' in params ? params.VolumeId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;

    }
}

/**
 * DescribeRunGroups request structure.
 * @class
 */
class DescribeRunGroupsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID
(If you leave it blank, the default item in the specified region will be used.)
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Quantity of returns. It is 10 by default, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset, which defaults to 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Filter, which supports filtering fields:
- Name: Run group name
- RunGroupId: Run group ID
- Status: Run group status
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * GetRunStatus response structure.
 * @class
 */
class GetRunStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job details
         * @type {RunMetadata || null}
         */
        this.Metadata = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Metadata) {
            let obj = new RunMetadata();
            obj.deserialize(params.Metadata)
            this.Metadata = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CFS configuration
 * @class
 */
class StorageOption extends  AbstractModel {
    constructor(){
        super();

        /**
         * CFS type. Valid values:
- SD: standard
- HP: high-performance
- TB: standard Turbo
- TP: high-performance Turbo
         * @type {string || null}
         */
        this.StorageType = null;

        /**
         * CFS availability zone
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * CFS capacity in GiB, required for the Turbo series
- Standard Turbo has a minimum capacity of 40 TiB, or 40,960 GiB; the capacity expansion step is 20 TiB, or 20,480 GiB.
- High-performance Turbo has a minimum capacity of 20 TiB, or 20,480 GiB; the capacity expansion step is 10 TiB, or 10,240 GiB.
         * @type {number || null}
         */
        this.Capacity = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StorageType = 'StorageType' in params ? params.StorageType : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.Capacity = 'Capacity' in params ? params.Capacity : null;

    }
}

/**
 * DescribeTables request structure.
 * @class
 */
class DescribeTablesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Quantity of returns. It is 10 by default, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset, which defaults to 0
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Filter, which supports filtering fields:
- Name: Table name
- TableId: Table ID
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * Table row
 * @class
 */
class TableRow extends  AbstractModel {
    constructor(){
        super();

        /**
         * Table row UUID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TableRowUuid = null;

        /**
         * Table row content
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Content = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TableRowUuid = 'TableRowUuid' in params ? params.TableRowUuid : null;
        this.Content = 'Content' in params ? params.Content : null;

    }
}

/**
 * DeleteVolumeData response structure.
 * @class
 */
class DeleteVolumeDataResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeEnvironments request structure.
 * @class
 */
class DescribeEnvironmentsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Offset, which defaults to 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Quantity of returns. It is 20 by default, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter, which supports filtering fields:
- EnvironmentId: Environment ID
- Name: Name
- Status: Environmental status
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * Application running option
 * @class
 */
class RunOption extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation failure mode. Valid values:
- ContinueWhilePossible
- NoNewCalls
         * @type {string || null}
         */
        this.FailureMode = null;

        /**
         * Whether to use the Call-Caching feature.
         * @type {boolean || null}
         */
        this.UseCallCache = null;

        /**
         * Whether to use the error suspension feature.
         * @type {boolean || null}
         */
        this.UseErrorOnHold = null;

        /**
         * Output archive COS path
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FinalWorkflowOutputsDir = null;

        /**
         * Whether to use the relative directory archive output.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.UseRelativeOutputPaths = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FailureMode = 'FailureMode' in params ? params.FailureMode : null;
        this.UseCallCache = 'UseCallCache' in params ? params.UseCallCache : null;
        this.UseErrorOnHold = 'UseErrorOnHold' in params ? params.UseErrorOnHold : null;
        this.FinalWorkflowOutputsDir = 'FinalWorkflowOutputsDir' in params ? params.FinalWorkflowOutputsDir : null;
        this.UseRelativeOutputPaths = 'UseRelativeOutputPaths' in params ? params.UseRelativeOutputPaths : null;

    }
}

/**
 * Nextflow option
 * @class
 */
class NFOption extends  AbstractModel {
    constructor(){
        super();

        /**
         * Config.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Config = null;

        /**
         * Profile.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Profile = null;

        /**
         * Report.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.Report = null;

        /**
         * Resume.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.Resume = null;

        /**
         * Nextflow engine version. Valid values:
- 22.10.4
- 22.10.8 
- 23.10.1
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NFVersion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Config = 'Config' in params ? params.Config : null;
        this.Profile = 'Profile' in params ? params.Profile : null;
        this.Report = 'Report' in params ? params.Report : null;
        this.Resume = 'Resume' in params ? params.Resume : null;
        this.NFVersion = 'NFVersion' in params ? params.NFVersion : null;

    }
}

/**
 * Table
 * @class
 */
class Table extends  AbstractModel {
    constructor(){
        super();

        /**
         * Table ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TableId = null;

        /**
         * Associated project ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Table name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Table description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Table column
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<TableColumn> || null}
         */
        this.Columns = null;

        /**
         * Creation time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Creator
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Creator = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TableId = 'TableId' in params ? params.TableId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;

        if (params.Columns) {
            this.Columns = new Array();
            for (let z in params.Columns) {
                let obj = new TableColumn();
                obj.deserialize(params.Columns[z]);
                this.Columns.push(obj);
            }
        }
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.Creator = 'Creator' in params ? params.Creator : null;

    }
}

/**
 * CVM configuration
 * @class
 */
class CVMOption extends  AbstractModel {
    constructor(){
        super();

        /**
         * CVM availability zone
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * CVM instance specifications
         * @type {string || null}
         */
        this.InstanceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;

    }
}

/**
 * Run job details
 * @class
 */
class RunMetadata extends  AbstractModel {
    constructor(){
        super();

        /**
         * Run type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RunType = null;

        /**
         * Run ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RunId = null;

        /**
         * Parent layer ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ParentId = null;

        /**
         * Job ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Job name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CallName = null;

        /**
         * Scatter index
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ScatterIndex = null;

        /**
         * Input
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Input = null;

        /**
         * Output
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Output = null;

        /**
         * Status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMessage = null;

        /**
         * Start time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Submission time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubmitTime = null;

        /**
         * End time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Command Line
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Command = null;

        /**
         * Runtime
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Runtime = null;

        /**
         * Preprocessing
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.Preprocess = null;

        /**
         * Post-processing
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.PostProcess = null;

        /**
         * Cache hit
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.CallCached = null;

        /**
         * Standard output
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Stdout = null;

        /**
         * Error output
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Stderr = null;

        /**
         * Other information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Meta = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RunType = 'RunType' in params ? params.RunType : null;
        this.RunId = 'RunId' in params ? params.RunId : null;
        this.ParentId = 'ParentId' in params ? params.ParentId : null;
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.CallName = 'CallName' in params ? params.CallName : null;
        this.ScatterIndex = 'ScatterIndex' in params ? params.ScatterIndex : null;
        this.Input = 'Input' in params ? params.Input : null;
        this.Output = 'Output' in params ? params.Output : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.ErrorMessage = 'ErrorMessage' in params ? params.ErrorMessage : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.SubmitTime = 'SubmitTime' in params ? params.SubmitTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Command = 'Command' in params ? params.Command : null;
        this.Runtime = 'Runtime' in params ? params.Runtime : null;
        this.Preprocess = 'Preprocess' in params ? params.Preprocess : null;
        this.PostProcess = 'PostProcess' in params ? params.PostProcess : null;
        this.CallCached = 'CallCached' in params ? params.CallCached : null;
        this.Stdout = 'Stdout' in params ? params.Stdout : null;
        this.Stderr = 'Stderr' in params ? params.Stderr : null;
        this.Meta = 'Meta' in params ? params.Meta : null;

    }
}

/**
 * DescribeVolumes request structure.
 * @class
 */
class DescribeVolumesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Environment ID
         * @type {string || null}
         */
        this.EnvironmentId = null;

        /**
         * Quantity of returns. It is 20 by default, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset, defaults to 0
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Filter, supports filtering fields:
- Name: Name
- IsDefault: Whether it is the default.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EnvironmentId = 'EnvironmentId' in params ? params.EnvironmentId : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * CreateEnvironment request structure.
 * @class
 */
class CreateEnvironmentRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Environment name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Environment configuration information
         * @type {EnvironmentConfig || null}
         */
        this.Config = null;

        /**
         * Environment description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Whether it is the default environment.
         * @type {boolean || null}
         */
        this.IsDefault = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;

        if (params.Config) {
            let obj = new EnvironmentConfig();
            obj.deserialize(params.Config)
            this.Config = obj;
        }
        this.Description = 'Description' in params ? params.Description : null;
        this.IsDefault = 'IsDefault' in params ? params.IsDefault : null;

    }
}

module.exports = {
    DeleteVolumeDataRequest: DeleteVolumeDataRequest,
    RetryRunsResponse: RetryRunsResponse,
    RunApplicationResponse: RunApplicationResponse,
    ExecutionTime: ExecutionTime,
    RunStatusCount: RunStatusCount,
    GetRunStatusRequest: GetRunStatusRequest,
    DescribeRunsResponse: DescribeRunsResponse,
    ImportTableFileResponse: ImportTableFileResponse,
    RunApplicationRequest: RunApplicationRequest,
    GetRunMetadataFileResponse: GetRunMetadataFileResponse,
    CreateVolumeResponse: CreateVolumeResponse,
    DeleteEnvironmentResponse: DeleteEnvironmentResponse,
    Environment: Environment,
    GetRunCallsRequest: GetRunCallsRequest,
    RunWorkflowRequest: RunWorkflowRequest,
    DescribeRunsRequest: DescribeRunsRequest,
    Run: Run,
    TableColumn: TableColumn,
    CreateVolumeRequest: CreateVolumeRequest,
    SecurityGroupOption: SecurityGroupOption,
    DescribeTablesRowsRequest: DescribeTablesRowsRequest,
    DescribeEnvironmentsResponse: DescribeEnvironmentsResponse,
    ModifyVolumeResponse: ModifyVolumeResponse,
    LimitRange: LimitRange,
    DescribeTablesResponse: DescribeTablesResponse,
    VPCOption: VPCOption,
    ResourceQuota: ResourceQuota,
    RetryRunsRequest: RetryRunsRequest,
    ImportTableFileRequest: ImportTableFileRequest,
    DeleteVolumeResponse: DeleteVolumeResponse,
    CacheInfo: CacheInfo,
    ClusterOption: ClusterOption,
    TerminateRunGroupResponse: TerminateRunGroupResponse,
    DescribeVolumesResponse: DescribeVolumesResponse,
    GitInfo: GitInfo,
    ApplicationVersion: ApplicationVersion,
    DeleteVolumeRequest: DeleteVolumeRequest,
    DeleteEnvironmentRequest: DeleteEnvironmentRequest,
    RunGroup: RunGroup,
    DatabaseOption: DatabaseOption,
    GetRunCallsResponse: GetRunCallsResponse,
    Filter: Filter,
    ResourceIds: ResourceIds,
    DescribeRunGroupsResponse: DescribeRunGroupsResponse,
    Volume: Volume,
    TerminateRunGroupRequest: TerminateRunGroupRequest,
    EnvironmentConfig: EnvironmentConfig,
    DescribeTablesRowsResponse: DescribeTablesRowsResponse,
    CreateEnvironmentResponse: CreateEnvironmentResponse,
    GetRunMetadataFileRequest: GetRunMetadataFileRequest,
    RunWorkflowResponse: RunWorkflowResponse,
    ModifyVolumeRequest: ModifyVolumeRequest,
    DescribeRunGroupsRequest: DescribeRunGroupsRequest,
    GetRunStatusResponse: GetRunStatusResponse,
    StorageOption: StorageOption,
    DescribeTablesRequest: DescribeTablesRequest,
    TableRow: TableRow,
    DeleteVolumeDataResponse: DeleteVolumeDataResponse,
    DescribeEnvironmentsRequest: DescribeEnvironmentsRequest,
    RunOption: RunOption,
    NFOption: NFOption,
    Table: Table,
    CVMOption: CVMOption,
    RunMetadata: RunMetadata,
    DescribeVolumesRequest: DescribeVolumesRequest,
    CreateEnvironmentRequest: CreateEnvironmentRequest,

}
